package com.hsj.service.imp;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hsj.dao.BookDao;
import com.hsj.domain.Book;
import com.hsj.service.IBookService;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *   继承 公用的ServiceImpl实现类， 只需要告诉他 需要引用的操作数据库的 dao类，  第二个参数是 要操的对象
 *   实现 上面定义的接口
 */
@Service
public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {

    //只需要   extends ServiceImpl<BookDao, Book> implements IBookService  就可以实现所有操作数据的方法

    @Autowired
    private BookDao bookDao;
    //如果 通过上面 继承 和 实现 得到的方法 不能满足业务需要 ，可以自己再写 一些功能,
    @Override
    public boolean saves(Book book) {
        return bookDao.insert(book) > 0 ;
    }

    /**
     * 由于 Iservice提供的 分页 查询 需要提供的参数，我们自定义分页查询， 把参数提供好 controller只需要提供 当前页 和 size 即可
     * @param currentPage  当前页
     * @param pageSize   每页的数据条数
     * @return
     */
    @Override
    public IPage<Book> getPage(int currentPage ,int pageSize,Book book) {
        LambdaQueryWrapper<Book>  lqw = new LambdaQueryWrapper<Book>();
        lqw.like(Strings.isNotEmpty(book.getType()),Book::getType,book.getType());
        lqw.like(Strings.isNotEmpty(book.getName()),Book::getName,book.getName());
        lqw.like(Strings.isNotEmpty(book.getDescription()),Book::getDescription,book.getDescription());
        Page<Book> bookPage = new Page<>(currentPage,pageSize);
        return bookDao.selectPage(bookPage,lqw);
    }
}
